更新日:、 作成日:
VBA セルを選択する (Range.Select, Selection)
はじめに
Excel VBA マクロでセルを選択したり選択範囲を取得する方法を紹介します。
Range("B1").Select または Cells(1, 2).Select メソッドから、セル「B1」を選択できます。
Active メソッドから、セルをアクティブにできます。アクティブセルにキーボードで入力できます。
Selection から、範囲選択しているセルを取得できます。
セルを選択する
Range の引数にセル名を指定すると、そのセルを選択できます。
セル「A1」を選択するには Range("A1").Select を入力します。
Range("A1").Select

Cells の引数にセルの行と列の番号を指定すると、そのセルを選択できます。
行「2」、列「A」を選択するには Cells(2, 1).Select を入力します。
Cells(1, 1).Select ' A1
Cells(2, 1).Select ' A2
Cells(1, 2).Select ' B1
Cells(2, 2).Select ' B2
そのシートが開かれていないときは「エラー 1004 アプリケーション定義またはオブジェクト定義のエラーです。」が発生します。
下記の「別シートのセルを選択する」方法でシートを指定すると、そのシートを開いてセルを選択できます。
Range("A1").Select ' このコードのシート (Sheet1) が開かれていないとエラー
Worksheets("Sheet1").Range("A1").Select ' Sheet1 を開いてセルを選択
またはシートを開いてからセルを選択します。
Worksheets("Sheet1").Select ' Sheet1 を開く
Range("A1").Select ' このコードのシート (Sheet1) のセル「A1」を選択
セルを範囲選択
セルの範囲「A1」~「B2」を選択するには Range("A1:B2").Select または Range("A1", "B2").Select を入力します。
Range("A1:B2").Select
Range("A1", "B2").Select

スポンサーリンク
セルをアクティブにする
セル「A1」をアクティブにするには Range("A1").Activate を入力します。
Range("A1").Activate ' このコードのシート (Sheet1) が開かれていないとエラー
Worksheets("Sheet1").Range("A1").Activate ' Sheet1 を開いてセルをアクティブ

またはシートを開いてからセルをアクティブします。
Worksheets("Sheet1").Activate ' Sheet1 を開く
Range("A1").Activate ' このコードのシート (Sheet1) のセル「A1」をアクティブ
そのシートが開かれていないときは「エラー 1004 アプリケーション定義またはオブジェクト定義のエラーです。」が発生します。
セルを範囲選択
セルの範囲「A1」~「B2」を選択するには Range("A1:B2").Activate または Range("A1", "B2").Activate を入力します。左上のセル「A1」がアクティブになります。
Range("A1:B2").Activate
Range("A1", "B2").Activate

ただし範囲の左上のセル「A1」がすでにアクティブセルのときは範囲選択されません。
Select と Activate の違い
次の画像のように選択しているとき、セル「B2」~「D4」が選択範囲で、セル「B2」がアクティブセルです。

Select も Activate も同じようにセルを選択できますが、選択範囲内のセルを選択するときに違いがあります。セルの範囲「B2」~「C4」を選択しているときに、範囲内のセル「C3」を選択します。
Range("B2:D4").Select
Range("C3").Select
Range("B2:D4").Activate
Range("C3").Activate
- Select:選択範囲がセル「C3」のみになります。
- Activate:選択範囲を維持したままセル「C3」をアクティブにします。


セルを範囲選択するときに Select を使用し、アクティブセルを設定するときに Activate を使用すれば問題ありません。
選択範囲のセルを取得する
選択しているセルを取得するには Selection を入力します。範囲選択しているときは、その範囲のセルを取得します。
Dim s As Range
Set s = Selection
Dim c As Range
For Each c In s
Debug.Print(c.Value)
Next
アクティブセルを取得するには ActiveCell を入力します。
Dim c As Range
Set c = ActiveCell
Debug.Print(c.Value)
セルの選択を解除する
セルの選択を解除する方法はありません。Excel でもそのような操作は存在しません。どこか 1 つのセルを選択します。
Range("A1").Select
別シートのセルを選択する
開いているシートのセルだけを選択できます。その他のシートに対して行うとエラーが発生します。
シートを指定するには Worksheets の引数にシート名またはインデックスを指定します。
Sheet1 を指定するには Worksheets("Sheet1") または Worksheets(1) を入力します。

' Sheet1 のセル「A1」を選択
Worksheets("Sheet1").Activate ' Sheet1 を開く
Worksheets("Sheet1").Range("A1").Select ' Sheet1 を開いて選択
Worksheets(1).Activate ' Sheet1 を開く
Worksheets(1).Range("A1").Select ' Sheet1 を開いて選択
' Sheet2 のセル「A1」を選択
Worksheets("Sheet2").Activate
Worksheets("Sheet2").Range("A1").Select
Worksheets(2).Activate
Worksheets(2).Range("A1").Select
Sheet1 に Range や Cells を入力すると、自身のシートのセルになります。自身を表す Me. が省略されています。
' どちらも同じコード
Range("A1").Value = "Sheet1"
Me.Range("A1").Value = "Sheet1"
標準モジュールに Range や Cells を入力すると、開いているシートのセルになります。アクティブシートを表す ActiveSheet. が省略されています。
' どちらも同じコード
Range("A1").Value = "アクティブ"
ActiveSheet.Range("A1").Value = "アクティブ"
スポンサーリンク